import axios from 'axios'
import store from '@/store'
import { logout } from '@/store/actions'
import { customHistory } from '@/utils'
import { message } from 'antd'

// 对axios进行配置
const http = axios.create({
  baseURL: process.env.REACT_APP_URL,
  timeout: 5000
})

// 统一添加token在请求头
http.interceptors.request.use(config => {
  // 对config进行修改，每次请求前做的事情
  const state = store.getState()
  if (state.user.token) {
    config.headers.Authorization = `Bearer ${state.user.token}`
  }
  return config
}, e => Promise.reject(e))


// 返回数据层级太多 res.data.data 后台给的有用的数据
http.interceptors.response.use(res => {
  // 取第二层的data，如果没取到还是使用res，将来的await得到的数据就是res.data.data
  return res?.data?.data || res
}, e => {
  // 处理token失效
  if (e.response.status === 401) {
    // 本地token清除，redux信息清除 === 做退出
    store.dispatch(logout())
    // 避免多次请求多次跳转login页面
    if (customHistory.location.pathname !== '/login') {
      message.error('登录失效')
      // 跳转到登录页面
      customHistory.push({
        pathname: '/login',
        state: {
          // 当前地址栏上的路由地址
          returnUrl: customHistory.location.pathname
        }
      })
    }
  }
  return Promise.reject(e)
})

export { http }